import java.util.Random;

public class RandomMaxSubarray {

    // 使用 Kadane 算法计算最大子数组和
    public static int maxSubArray(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 0;
        }

        int maxSum = nums[0];
        int currentSum = nums[0];

        for (int i = 1; i < nums.length; i++) {
            currentSum = Math.max(nums[i], currentSum + nums[i]);
            maxSum = Math.max(maxSum, currentSum);
        }

        return maxSum;
    }

    // 随机生成一个整数数组
    public static int[] generateRandomArray(int length, int minValue, int maxValue) {
        int[] array = new int[length];
        Random random = new Random();

        for (int i = 0; i < length; i++) {
            // 生成 [minValue, maxValue] 范围内的随机整数
            array[i] = random.nextInt(maxValue - minValue + 1) + minValue;
        }

        return array;
    }

    // 打印数组内容
    public static void printArray(int[] array) {
        System.out.print("[");
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]);
            if (i < array.length - 1) {
                System.out.print(", ");
            }
        }
        System.out.println("]");
    }

    // 主函数
    public static void main(String[] args) {
        // 设置随机数组的参数
        int arrayLength = 10;      // 数组长度
        int minValue = -50;        // 最小值
        int maxValue = 50;         // 最大值

        // 1. 随机生成数组
        int[] randomArray = generateRandomArray(arrayLength, minValue, maxValue);

        // 2. 打印随机生成的数组
        System.out.println("随机生成的数组为：");
        printArray(randomArray);

        // 3. 计算最大子数组和
        int maxSum = maxSubArray(randomArray);

        // 4. 输出结果
        System.out.println("该数组的【最大子数组和】为：" + maxSum);
    }
}